package cheme.Application.views;

//import org.eclipse.core.resources.IContainer;
//import org.eclipse.core.resources.IFile;
//import org.eclipse.core.resources.IFolder;
//import org.eclipse.core.resources.IProject;
//import org.eclipse.core.resources.IResource;
//import org.eclipse.core.resources.IResourceChangeEvent;
//import org.eclipse.core.resources.IResourceChangeListener;
//import org.eclipse.core.resources.IWorkspace;
//import org.eclipse.core.resources.IWorkspaceRoot;
//import org.eclipse.core.resources.ResourcesPlugin;
//import org.eclipse.jface.action.Action;
//import org.eclipse.jface.action.IMenuListener;
//import org.eclipse.jface.action.IMenuManager;
//import org.eclipse.jface.action.IToolBarManager;
//import org.eclipse.jface.action.MenuManager;
//import org.eclipse.jface.action.Separator;
//import org.eclipse.jface.dialogs.MessageDialog;
//import org.eclipse.jface.viewers.DoubleClickEvent;
//import org.eclipse.jface.viewers.IDoubleClickListener;
//import org.eclipse.jface.viewers.ISelection;
//import org.eclipse.jface.viewers.IStructuredContentProvider;
//import org.eclipse.jface.viewers.IStructuredSelection;
//import org.eclipse.jface.viewers.ITreeContentProvider;
//import org.eclipse.jface.viewers.LabelProvider;
//import org.eclipse.jface.viewers.TreeViewer;
//import org.eclipse.jface.viewers.Viewer;
//import org.eclipse.jface.viewers.ViewerFilter;
//import org.eclipse.jface.viewers.ViewerSorter;
//import org.eclipse.swt.SWT;
//import org.eclipse.swt.graphics.Image;
//import org.eclipse.swt.widgets.Composite;
//import org.eclipse.swt.widgets.Menu;
//import org.eclipse.ui.IActionBars;
//import org.eclipse.ui.IEditorInput;
//import org.eclipse.ui.IFileEditorInput;
//import org.eclipse.ui.ISharedImages;
//import org.eclipse.ui.IViewSite;
//import org.eclipse.ui.IWorkbenchActionConstants;
//import org.eclipse.ui.PlatformUI;
//import org.eclipse.ui.part.DrillDownAdapter;
//import org.eclipse.ui.part.FileEditorInput;
//import org.eclipse.ui.part.ViewPart;


public class ChemeProjectView //extends ViewPart
{
//	public static final String ID = "edu.wsu.eecs.cheme.views.ChemeProjectView";
//
//	private TreeViewer viewer;
//
//	// private ActionGroup actionGroup;
//
//	private DrillDownAdapter drillDownAdapter;
//
//	// private Action action1;
//
//	// private Action action2;
//
//	private Action doubleClickAction;
//
//	private Action createNewResourceAction;
//
//	private Action deleteResourceAction;
//	
//	ViewerFilter projectFilter = new ViewerFilter()
//	{
//		@Override
//		public boolean select(Viewer viewer, Object parentElement, Object element)
//		{
//			return element instanceof IResource && !".project".equals(((IResource)element).getName());
//		}
//	};
//	
//	IResourceChangeListener resourceChangeListener = new IResourceChangeListener()
//	{
//		public void resourceChanged(IResourceChangeEvent event)
//		{
//			//getViewer().refresh(event.getResource());
//		}
//	};
//	
//	IProject project = null;
//	IFolder folder = null;
//	IFile file = null;
//
//	public static class ResourceNavigator
//	{
//		public static Object getParent(Object child)
//		{
//			try
//			{
//				if(child instanceof IResource)
//				{
//					return ((IResource)child).getParent();
//				}
//			}
//			catch(Exception e)
//			{
//				e.printStackTrace();
//			}
//			return null;
//		}
//
//		public static Object[] getChildren(Object parent)
//		{
//			Object[] children = null;
//
//			try
//			{
//				if(parent instanceof IContainer)
//				{
//					children = ((IContainer)parent).members();
//				}
//			}
//			catch(Exception e)
//			{
//				e.printStackTrace();
//			}
//
//			return children;
//		}
//
//		public static boolean hasChildren(Object parent)
//		{
//			Object[] children = getChildren(parent);
//
//			return null != children && children.length != 0;
//		}
//	}
//
//	/*
//	 * The content provider class is responsible for providing objects to the
//	 * view. It can wrap existing objects in adapters or simply return objects
//	 * as-is. These objects may be sensitive to the current input of the view,
//	 * or ignore it and always show the same content (like Task List, for
//	 * example).
//	 */
//
//	class ViewContentProvider implements IStructuredContentProvider, ITreeContentProvider
//	{
//		TreeViewer viewer;
//		
//		public ViewContentProvider(TreeViewer viewer)
//		{
//			this.viewer = viewer;
//		}
//		
//		private IResource invisibleRoot;
//
//		/*
//		 * We will set up a dummy model to initialize tree heararchy. In a real
//		 * code, you will connect to a real model and expose its hierarchy.
//		 */
//		private void initialize()
//		{
//			try
//			{
//				IWorkspace workspace = ResourcesPlugin.getWorkspace();
//				workspace.addResourceChangeListener(resourceChangeListener);
//				
//				IWorkspaceRoot root = workspace.getRoot();
//				project = root.getProject("Project");
//				file = project.getFile("test.cheme");
//				
//				invisibleRoot = project;
//
//				// at this point, no resources have been created
//				if(!project.exists())
//				{
//					project.create(null);
//				}
//
//				if(!project.isOpen())
//				{
//					project.open(null);
//				}
//
//				if(!file.exists())
//				{
////					byte[] bytes = "File contents".getBytes();
////					InputStream source = new ByteArrayInputStream(bytes);
//					file.create(null, IResource.NONE, null);
//				}
//			}
//			catch(Exception e)
//			{
//				e.printStackTrace();
//			}
//		}
//
//		public void inputChanged(Viewer v, Object oldInput, Object newInput)
//		{
//			
//		}
//
//		public void dispose()
//		{
//		}
//
//		public Object[] getElements(Object parent)
//		{
//			if(parent.equals(getViewSite()))
//			{
//				if(null == invisibleRoot)
//				{
//					initialize();
//				}
//				
//				return getChildren(invisibleRoot);
//			}
//			return getChildren(parent);
//		}
//
//		public Object getParent(Object child)
//		{
//			return ResourceNavigator.getParent(child);
//		}
//
//		public Object[] getChildren(Object parent)
//		{
//			return ResourceNavigator.getChildren(parent);
//		}
//
//		public boolean hasChildren(Object parent)
//		{
//			return ResourceNavigator.hasChildren(parent);
//		}
//	}
//
//	class ViewLabelProvider extends LabelProvider
//	{
//		public String getText(Object obj)
//		{
//			if(obj instanceof IResource)
//			{
//				return ((IResource)obj).getName();
//			}
//
//			return obj.toString();
//		}
//
//		public Image getImage(Object obj)
//		{
//			String imageKey = null;
//
//			if(obj instanceof IProject || obj instanceof IFolder)
//			{
//				imageKey = ISharedImages.IMG_OBJ_FOLDER;
//			}
//			else // if(obj instanceof IFile)
//			{
//				imageKey = ISharedImages.IMG_OBJ_FILE;
//			}
//
//			return PlatformUI.getWorkbench().getSharedImages().getImage(imageKey);
//		}
//	}
//
//	class NameSorter extends ViewerSorter
//	{
//	}
//
//	/**
//	 * The constructor.
//	 */
//	public ChemeProjectView()
//	{
//	}
//
//	/**
//	 * This is a callback that will allow us to create the viewer and initialize
//	 * it.
//	 */
//	public void createPartControl(Composite parent)
//	{
//		viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
//		drillDownAdapter = new DrillDownAdapter(viewer);
//		viewer.setContentProvider(new ViewContentProvider(viewer));
//		viewer.setLabelProvider(new ViewLabelProvider());
//		
//		viewer.addFilter(projectFilter);
//		
//		viewer.setSorter(new NameSorter());
//		
//		viewer.setInput(getViewSite());
//		
//		makeActions();
//		hookContextMenu();
//		hookDoubleClickAction();
//		contributeToActionBars();
//	}
//
//	private void hookContextMenu()
//	{
//		MenuManager menuMgr = new MenuManager("#PopupMenu");
//		menuMgr.setRemoveAllWhenShown(true);
//		menuMgr.addMenuListener(new IMenuListener()
//		{
//			public void menuAboutToShow(IMenuManager manager)
//			{
//				ChemeProjectView.this.fillContextMenu(manager);
//			}
//		});
//
//		Menu menu = menuMgr.createContextMenu(viewer.getControl());
//		viewer.getControl().setMenu(menu);
//		getSite().registerContextMenu(menuMgr, viewer);
//	}
//
//	private void contributeToActionBars()
//	{
//		IActionBars bars = getViewSite().getActionBars();
//		fillLocalPullDown(bars.getMenuManager());
//		fillLocalToolBar(bars.getToolBarManager());
//	}
//
//	private void fillLocalPullDown(IMenuManager manager)
//	{
//		manager.add(createNewResourceAction);
//		manager.add(new Separator());
//		manager.add(deleteResourceAction);
//	}
//
//	private void fillContextMenu(IMenuManager manager)
//	{
//		manager.add(createNewResourceAction);
//		manager.add(deleteResourceAction);
//
//		manager.add(new Separator());
//		drillDownAdapter.addNavigationActions(manager);
//
//		// Other plug-ins can contribute there actions here
//		manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
//	}
//
//	private void fillLocalToolBar(IToolBarManager manager)
//	{
//		manager.add(createNewResourceAction);
//		manager.add(deleteResourceAction);
//		manager.add(new Separator());
//		drillDownAdapter.addNavigationActions(manager);
//	}
//
//	private void makeActions()
//	{
//		createNewResourceAction = new Action()
//		{
//			public void run()
//			{
//				try
//				{
//					// create a new file.
//					IFile file = project.getFile("test2.cheme");
//
//					if(!file.exists())
//					{
//						file.create(null, IResource.NONE, null);
//					}
//					
//					getViewer().add(project, file);
//					getViewer().refresh();
//				}
//				catch(Exception e)
//				{
//					e.printStackTrace();
//				}
//			}
//		};
//
//		createNewResourceAction.setText("Create a new element");
//		createNewResourceAction
//				.setToolTipText("Create a new project element inside this container element.");
//		createNewResourceAction.setImageDescriptor(PlatformUI.getWorkbench()
//				.getSharedImages().getImageDescriptor(
//						ISharedImages.IMG_TOOL_NEW_WIZARD));
//
//		deleteResourceAction = new Action()
//		{
//			public void run()
//			{
//				ISelection selection = viewer.getSelection();
//				Object element = ((IStructuredSelection)selection).getFirstElement();
//
//				if(element instanceof IResource)
//				{
//					/*
//					 * Create a resource visitor that recursively deletes the
//					 * resource and children.
//					 */
////					IResourceVisitor deletor = new IResourceVisitor()
////					{
////						public boolean visit(IResource resource)
////						{
////							if(ResourceNavigator.hasChildren(resource))
////							{
////								for(Object child : ResourceNavigator
////										.getChildren(resource))
////								{
////									visit((IResource)child);
////								}
////							}
////
////							try
////							{
////								Object parent = ResourceNavigator.getParent(resource);
////								
////								resource.delete(true, null);
////								
////								getViewer().refresh(parent);
////
////								return true;
////							}
////							catch(Exception e)
////							{
////								e.printStackTrace();
////							}
////
////							return false;
////						}
////					};
//
//					try
//					{
////						deletor.visit((IResource)element);
//						((IResource)element).delete(true, null);
//					}
//					catch(Exception e)
//					{
//						e.printStackTrace();
//					}
//
//					getViewer().remove(element);					
//					getViewer().refresh();
//				}
//			}
//		};
//
//		deleteResourceAction.setText("Delete element");
//		deleteResourceAction
//				.setToolTipText("Delete the selected project element.");
//		deleteResourceAction.setImageDescriptor(PlatformUI.getWorkbench()
//				.getSharedImages().getImageDescriptor(
//						ISharedImages.IMG_TOOL_DELETE));
//
//		// action1 = new Action()
//		// {
//		// public void run()
//		// {
//		// showMessage("Action 1 executed");
//		// }
//		// };
//		// action1.setText("Action 1");
//		// action1.setToolTipText("Action 1 tooltip");
//		// action1.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
//
//		// action2 = new Action()
//		// {
//		// public void run()
//		// {
//		// showMessage("Action 2 executed");
//		// }
//		// };
//		// action2.setText("Action 2");
//		// action2.setToolTipText("Action 2 tooltip");
//		// action2.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK));
//
//		doubleClickAction = new Action()
//		{
//			public void run()
//			{
//				ISelection selection = viewer.getSelection();
//
//				try
//				{
//					Object element = ((IStructuredSelection)selection)
//							.getFirstElement();
//					TreeViewer viewer = getViewer();
//
//					if(viewer.isExpandable(element))
//					{
//						viewer.setExpandedState(element, !viewer
//								.getExpandedState(element));
//					}
//					else if(null != element && element instanceof IFile)
//					{
//						IFile file = null;
//
//						try
//						{
//							file = (IFile)element;
//						}
//						catch(Exception e)
//						{
//							e.printStackTrace();
//						}
//
//						IFileEditorInput input = new FileEditorInput(file);
//						getViewSite().getWorkbenchWindow().getActivePage()
//								.openEditor((IEditorInput)input,
//										ProcessEditor.ID);
//					}
//				}
//				catch(Throwable e)
//				{
//					e.printStackTrace();
//				}
//			}
//		};
//	}
//
//	private void hookDoubleClickAction()
//	{
//		viewer.addDoubleClickListener(new IDoubleClickListener()
//		{
//			public void doubleClick(DoubleClickEvent event)
//			{
//				doubleClickAction.run();
//			}
//		});
//	}
//
//	private void showMessage(String message)
//	{
//		MessageDialog.openInformation(viewer.getControl().getShell(),
//				"ChemE Project View", message);
//	}
//
//	/**
//	 * Passing the focus request to the viewer's control.
//	 */
//	public void setFocus()
//	{
//		viewer.getControl().setFocus();
//	}
//
//	/**
//	 * Initializes and registers the context menu.
//	 * 
//	 * @since 2.0
//	 */
//	protected void initContextMenu()
//	{
//		MenuManager menuMgr = new MenuManager("#PopupMenu"); //$NON-NLS-1$
//		menuMgr.setRemoveAllWhenShown(true);
//		menuMgr.addMenuListener(new IMenuListener()
//		{
//			public void menuAboutToShow(IMenuManager manager)
//			{
//				fillContextMenu(manager);
//			}
//		});
//		TreeViewer viewer = getViewer();
//		Menu menu = menuMgr.createContextMenu(viewer.getTree());
//		viewer.getTree().setMenu(menu);
//		getSite().registerContextMenu(menuMgr, viewer);
//	}
//
//	/**
//	 * Called when the context menu is about to open. Delegates to the action
//	 * group using the viewer's selection as the action context.
//	 * 
//	 * @since 2.0
//	 */
//	// protected void fillContextMenu(IMenuManager menu) {
//	// IStructuredSelection selection = (IStructuredSelection) getViewer()
//	// .getSelection();
//	// getActionGroup().setContext(new ActionContext(selection));
//	// getActionGroup().fillContextMenu(menu);
//	// }
//	/**
//	 * Returns the resource viewer which shows the resource hierarchy.
//	 * 
//	 * @since 2.0
//	 */
//	public TreeViewer getViewer()
//	{
//		return viewer;
//	}
//
//	// /**
//	// * Returns the action group.
//	// *
//	// * @return the action group
//	// */
//	// protected ActionGroup getActionGroup() {
//	// return actionGroup;
//	// }
//	//    
//	// /**
//	// * Sets the action group.
//	// *
//	// * @param actionGroup the action group
//	// */
//	// protected void setActionGroup(ActionGroup actionGroup) {
//	// this.actionGroup = actionGroup;
//	// }
}